// pkg/util/ip.go
package util

import (
	"net"
)

// GetRealAddressByIP 根据IP地址获取真实地理位置
func GetRealAddressByIP(ip string) string {
	// 如果是本地IP或内网IP，直接返回"内网IP"
	if isLocalIP(ip) {
		return "内网IP"
	}

	// 以下是用于示例，实际项目中可能需要调用第三方IP地址库API
	// 例如：ipip.net、高德地图IP定位API等
	// 这里为了简单，直接返回"未知位置"
	return "未知位置"
}

// isLocalIP 判断是否为本地IP
func isLocalIP(ip string) bool {
	// 检查是否为本地回环地址
	if ip == "127.0.0.1" || ip == "::1" || ip == "localhost" {
		return true
	}

	// 解析IP地址
	ipAddr := net.ParseIP(ip)
	if ipAddr == nil {
		return false
	}

	// 检查是否为内网IP
	if ipAddr.IsLoopback() || ipAddr.IsLinkLocalUnicast() || ipAddr.IsLinkLocalMulticast() {
		return true
	}

	// 检查常见的内网IP段
	if ip4 := ipAddr.To4(); ip4 != nil {
		switch {
		case ip4[0] == 10:
			return true // 10.0.0.0/8
		case ip4[0] == 172 && ip4[1] >= 16 && ip4[1] <= 31:
			return true // 172.16.0.0/12
		case ip4[0] == 192 && ip4[1] == 168:
			return true // 192.168.0.0/16
		}
	}

	return false
}
